package day02;

import java.text.DecimalFormat;

public class DataTypeDemo {

//    static int b =10;
//    public static final int b1=20;
//
//    public DataTypeDemo() {
//    }
//
//    public static int getB() {
//        return b;
//    }
//
//    public static void setB(int b) {
//        DataTypeDemo.b = b;
//    }
//
//    public static int getB1() {
//        return b1;
//    }

    public static void main(String[] args) {

//        byte,
//        boolean,
//        long,
//        short,
//        float,
//        int,
//        char,
//        double

        //设置浮点数的小数位数
        float a= 2.654545f;
        DecimalFormat dataFormat = new DecimalFormat( "0.0000");
        a = Float.parseFloat(dataFormat.format(a));

        System.out.println(a);
        int a1 = 205;
        System.out.println(5/2.0);

//        int a3=100000000000;初始化超出范围的时候就会直接报错
        int a4=1000000000*10;
        System.out.println(a4);//1410065408，这里会溢出，但是不会报错，需要避免

        long a5=10000000000L;//编译错误，100亿默认为整形，不在数字后面加L或l会报错

        long c1 = 1000000000*2*10L;//20000000000
        System.out.println(c1);
        long c2 = 1000000000*3*10L;//-12949672960这里运算溢出了，他会先算前面10亿*3，是整形，所以数字溢出
        System.out.println(c2);

        //浮点型，默认为double，所以想用float的时候 必须在数据后面加f或F，运算是会出现误差，所以在涉及 到财务的时候，不允许用浮点型
        double f = 2.0,i = 1.9;
        System.out.println(f-i);
        float f1 = 3.0f,i1 = 1.9f;
        System.out.println(f1 - i1);

//        布尔类型
        boolean g = true;
        boolean g1 = false;

//        字符型，采用Unicode：统一码，通用码，万国码，世界级通用的定长（16位）字符集

        char char1 = '男';
        char char2 = '女';
        char char3 = '^';
        char char4 = '\'';


/*
* 类型间的转换           char
*   由小到大依次为：byte，short，int，long，float，double
*   两种方式：
*       自动/隐式类型装换：小类型到大类型
*       强制类型转换：大类型到小类型
*   两种规则：
*       整数直接量可以直接赋值给byte，short,char，但不能超出范围
*       byte，short，char型数据参与运算时，系统会自动将其转化为int再运算
* */

        long longb =10;
        int intb = (int)longb;//强制类型转换

        long d = 5;//自动类型转换
        double d1 = 5;

        long d2 = 10000000000L;
        int d3 =(int) d2;//发生强转的时候有可能发生溢出---1410065408
        System.out.println(d3);

        double d4 = 45.1654;
        int d5 = (int) d4;//强转的时候有可能导致精度丢失---45
        System.out.println(d5);

        byte d7=1,d8=3;
        byte d6 = (byte)(d7+d8);
        System.out.println(d6);

        System.out.println(2+'2');//52
        System.out.println('2'+'2');//100
        System.out.println(Math.PI);
    }
}
